package com.service.impl;

import com.dao.RbacMenuDao;
import com.entity.RbacMenu;
import com.entity.ResponseEntity;
import com.service.RbacMenuService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

@Service
public class RbacMenuServiceImpl implements RbacMenuService {
    private RbacMenuDao rbacMenuDao;
    @Autowired(required = false)
    public void setRbacMenuDao(RbacMenuDao rbacMenuDao) {
        this.rbacMenuDao = rbacMenuDao;
    }

    @Override
    public ResponseEntity<RbacMenu> findAll() {
        List<RbacMenu> all = rbacMenuDao.findAll();
        return new ResponseEntity(200,"查询成功",all);
    }

    /*
    整不懂，我会回来的
     */
    @Override
    public ResponseEntity findByRoleId(int roleId) {
        //所有的菜单，不含父菜单
        List<RbacMenu> all = rbacMenuDao.findByRoleId(roleId);
        List myMenuId =new ArrayList();
        for (RbacMenu rbacMenu : all) {
            //把我的菜单数据id存入List集合中 用于下面使用contains，包含的意思
            myMenuId.add(rbacMenu.getMenuid());
        }
        //直接查询所有的菜单，然后把不包含的内容，去掉即可
        List<RbacMenu> allMenu = rbacMenuDao.findAll();
        //遍历一级菜单
        for (RbacMenu menu : allMenu) {
            //所有的二级菜单 如果有第三级菜单，这里就用递归的办法写
            //如果要动态删除集合中的数据，我们必须使用迭代器
            Iterator<RbacMenu> iterator = menu.getMenus().iterator();
            while (iterator.hasNext()){
                //循环查询，我们的有权限的菜单，是否包含在全部菜单中
                //myMenuId是我所拥有的id，右边是迭代器遍历出来的一个id
                if (!myMenuId.contains(iterator.next().getMenuid())){
                    //如果不包含，就说明我没有这个菜单的权限，就删掉这个菜单
                    iterator.remove();
                }
            }
        }
        return new ResponseEntity<>(200,"查询成功",allMenu);
    }
}
